package com.action.commute;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.common.*;
import com.db.commute.*;

public class ListMonthAction {
	private Date prevmonth;
	private Date tomonth;
	private Date nextmonth;
	private String smonth;
	private int sabun;
	private List<Object> listm;
	private CommuteDAO commDAO;
	private DateProcess dateProc;
	private ListProcess listProc;
	private int endday;
	private int curpage = 1;	// 현재 페이지
	private int totalpage;	// 전체 페이지
	private int lpp = 10;	// 페이지 당 줄수
	
	public int getEndday() {
		return endday;
	}
	public Date getPrevmonth() {
		return prevmonth;
	}
	public Date getTomonth() {
		return tomonth;
	}
	public Date getNextmonth() {
		return nextmonth;
	}
	public List<Object> getListm() {
		return listm;
	}
	public void setSmonth(String smonth) {
		this.smonth = smonth;
	}
	public void setSabun(int sabun) {
		this.sabun = sabun;
	}
	
	public int getCurpage() {
		return curpage;
	}
	public void setCurpage(int curpage) {
		this.curpage = curpage;
	}
	public int getTotalpage() {
		return totalpage;
	}
	public void setLpp(int lpp) {
		this.lpp = lpp;
	}
	
	public void setCommDAO(CommuteDAO commDAO) {
		this.commDAO = commDAO;
	}
	public void setDateProc(DateProcess dateProc) {
		this.dateProc = dateProc;
	}
	public void setListProc(ListProcess listProc) {
		this.listProc = listProc;
	}
	
	public String execute(){
		String result = "";
		try {
			// 넘어온 값이 없을 경우 오늘을 기준으로 설정
			if(smonth == null || smonth.equals("newd")){
				tomonth = new Date();
			}else{				
				tomonth = dateProc.valueToDate(smonth);
			}			
			// 해당월의 마지막날을 구한다 (테이블 표시용)
			endday = dateProc.getLastDayOfMonth(tomonth);
			// 직원의 사번목록을 얻어와 리스트를 만든다
			List<Integer> sblist = commDAO.getSabunList();
			listm = new ArrayList<Object>(sblist.size());
			// 각 사번마다 해당월에 1~말일 까지의 출퇴근 목록을 얻어와 저장한다
			for(Integer i : sblist){
				// 사번별로 출퇴근 목록을 얻기 위한 인자로 VO사용
				CommuteVO cvo = new CommuteVO();
				cvo.setSabun(i.intValue());
                cvo.setRegdate(tomonth);				
				List<CommuteVO> cmlist = commDAO.getListMonth(cvo);
				// 얻어온 리스트를 1~말일까지의 월 크기에 맞춰 중간에 공백VO를 삽입한다
				cmlist = dateProc.convertList(i.intValue(), endday, cmlist);
				// 전체 리스트에 add한다 (사번별 리스트안에 출퇴근 목록 리스트 2중 구조)
				listm.add(cmlist);
			}
			// 이전, 다음달 을 구해 JSP로 보낸다 (출력, 선택용)
			Date months[] = dateProc.getMonths(tomonth);
			prevmonth = months[0];
			nextmonth = months[2];
			// 페이지를 구분한다			
			totalpage = listProc.getTotalPage(listm, lpp);
			listm = listProc.createPage(curpage, lpp, totalpage, listm);
			result = "success";
		} catch (Exception e) {
			System.out.println("ListMonthAction.execute():"+e.toString());			
			result = "error";
		}
		return result;
	}
}
